AWS LambdaでNode.js v6.10がサポートされました
大栗です。
本日LambdaのNode.jsでv6.10がサポートされましたのでレポートしてみます。
LambdaのNode.jsサポート
Lambdaは今までNode.jsを以下のバージョンでサポートしてきました。
バージョン | Lambdaサポート日(現地時刻) | 備考 |
---|---|---|
Node.js v0.10 | 2014/11/15 | 新規作成はできない。2017年4月末に起動もできなくなる。 |
Node.js v4.3 | 2016/04/07 | 現在の主流。 |
Node.js v6.10 | 2017/03/22 | New! |
Node.js自身のサポート状況は以下のようになっています。v4系(v4.3)はあと1年程度でNode.js自体のメンテナンスが終了するので、今後はv6.10を使うようにしましょう。
LTS Status | Release | Codename | Active LTS Start | Maintenance Start | Maintenance End |
---|---|---|---|---|---|
End-of-Life | v0.10 | - | 2015-10-01 | 2016-10-31 | |
End-of-Life | v0.12 | - | 2016-04-01 | 2016-12-31 | |
Active | v4 | Argon | 2015-10-01 | 2017-04-01 | 2018-04-01 |
No LTS | v5 | N/A | N/A | N/A | |
Active | v6 | Boron | 2016-10-18 | 2018-04-18 | 2019-04-18 |
No LTS | v7 | N/A | N/A | N/A |
https://github.com/nodejs/LTS
Node.js v6
Node.jsを書いていないので公式ページを見ると、v6の特徴としてES2015を93%サポート(こちらのページによるとv6.10では99%サポート!となっています)している事が大きいです。
試してみた
ここではブループリントのhello-world
を試してみます。
ブループリントは既にv6.10対応のようです。
ランタイムでNode.js 6.10
が出てくるので選択します。
コードはこんな感じでv4.3の時と変わっていないようです。
'use strict'; console.log('Loading function'); exports.handler = (event, context, callback) => { //console.log('Received event:', JSON.stringify(event, null, 2)); console.log('value1 =', event.key1); console.log('value2 =', event.key2); console.log('value3 =', event.key3); callback(null, event.key1); // Echo back the first key value //callback('Something went wrong'); };
テストをしてみます。イベントはデフォルトで以下の内容です。
{ "key3": "value3", "key2": "value2", "key1": "value1" }
結果は以下のようになり正常終了します。Lambdaとしては何も変わっていません。
START RequestId: 1a2b3c4d-5e6f-7g8h-9i0j-1k2l3m4n5o6p Version: $LATEST 2017-03-23T07:07:08.452Z 1a2b3c4d-5e6f-7g8h-9i0j-1k2l3m4n5o6p value1 = value1 2017-03-23T07:07:08.452Z 1a2b3c4d-5e6f-7g8h-9i0j-1k2l3m4n5o6p value2 = value2 2017-03-23T07:07:08.453Z 1a2b3c4d-5e6f-7g8h-9i0j-1k2l3m4n5o6p value3 = value3 END RequestId: 1a2b3c4d-5e6f-7g8h-9i0j-1k2l3m4n5o6p REPORT RequestId: 1a2b3c4d-5e6f-7g8h-9i0j-1k2l3m4n5o6p Duration: 30.34 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 16 MB
次に古いプログラミングモデルの動作も確認してみます。この様にハンドラーがexports.handler = function (event, context)
となっている古いスタイルで書いてみます。
'use strict'; console.log('Loading function'); exports.handler = function (event, context) { //console.log('Received event:', JSON.stringify(event, null, 2)); console.log('value1 =', event.key1); console.log('value2 =', event.key2); console.log('value3 =', event.key3); context.done(null, event.key1); };
正常に実行できます。古いプログラミングモデルでも動作する模様です。
START RequestId: 1a2b3c4d-5e6f-7g8h-9i0j-1k2l3m4n5o6p Version: $LATEST 2017-03-23T07:15:26.933Z 1a2b3c4d-5e6f-7g8h-9i0j-1k2l3m4n5o6p value1 = value1 2017-03-23T07:15:26.933Z 1a2b3c4d-5e6f-7g8h-9i0j-1k2l3m4n5o6p value2 = value2 2017-03-23T07:15:26.933Z 1a2b3c4d-5e6f-7g8h-9i0j-1k2l3m4n5o6p value3 = value3 END RequestId: 1a2b3c4d-5e6f-7g8h-9i0j-1k2l3m4n5o6p REPORT RequestId: 1a2b3c4d-5e6f-7g8h-9i0j-1k2l3m4n5o6p Duration: 16.16 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 15 MB
ドキュメントでは、古いプログラミングモデルについて以下のような記述があります。つまり下位互換性のためにのv6.10でもdone()
,、succeed()
、fail()
の各メソッドがあると言うことです。あくまで下位互換性のためなので、新規の場合には必ず現在のモデルで作成しましょう。バージョンアップの場合も、できれば新しいモデルに修正したいところです。
The context object supports the done(), succeed(), and fail() methods that you can use to terminate your Lambda function. These methods are also present in runtimes v4.3 and v6.10 for backward compatibility.
The Context Methods in Node.js Runtime v0.10.42
さいごに
Node.jsは開発が活発であるため、一定期間でバージョンがどんどん上がっていきます。現在のところ古いプログラミングモデルも動作するようです。Node.js v0.10が2017年4月末に終了するので、この機会にv4.3を飛ばしてv6.10にするのも良いかと思います。(十分なテストは必要ですよ!)